// 内容脚本，在每个页面注入按钮
console.log("Content.js 开始加载");

// 向页面注入全局函数定义
function injectGlobalFunctions() {
  // 创建一个 script 元素
  const script = document.createElement('script');
  
  // 设置脚本来源为扩展包中的文件
  script.src = chrome.runtime.getURL('page-functions.js');
  
  // 设置脚本属性
  script.type = 'text/javascript';
  
  // 当脚本加载完成时的回调
  script.onload = function() {
    console.log("页面全局函数已成功注入");
  };
  
  // 错误处理
  script.onerror = function(error) {
    console.error("页面全局函数注入失败:", error);
  };
  
  // 将脚本添加到页面中
  (document.head || document.documentElement).appendChild(script);
}

// 注入全局函数
injectGlobalFunctions();

// 创建自动消失的提示框函数
function showNotification(message) {
  // 创建提示框元素
  const notification = document.createElement('div');
  notification.innerText = message;
  notification.style.position = 'fixed';
  notification.style.top = '80px';
  notification.style.left = '50%';
  notification.style.transform = 'translateX(-50%)';
  notification.style.zIndex = '9999';
  notification.style.padding = '12px 24px';
  notification.style.backgroundColor = '#333';
  notification.style.color = 'white';
  notification.style.borderRadius = '6px';
  notification.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.3)';
  notification.style.fontSize = '14px';
  notification.style.opacity = '0';
  notification.style.transition = 'opacity 0.3s ease, transform 0.3s ease';
  notification.style.textAlign = 'center';
  notification.style.minWidth = '300px';
  notification.style.maxWidth = '80%';
  notification.style.wordWrap = 'break-word';
  
  // 添加到页面
  document.body.appendChild(notification);
  
  // 显示提示框
  setTimeout(() => {
    notification.style.opacity = '1';
  }, 10);
  
  // 2秒后自动隐藏（原3秒，现在改为2秒）
  setTimeout(() => {
    notification.style.opacity = '0';
    
    // 动画结束后移除元素
    setTimeout(() => {
      if (notification.parentNode) {
        document.body.removeChild(notification);
      }
    }, 300);
  }, 2000);
}

// 显示保存的内容 (现在改为显示剪贴板内容)
async function showSavedContent() {
  // 检查扩展上下文是否有效
  if (!(chrome && chrome.runtime)) {
    return;
  }
  
  try {
    // 读取剪贴板内容
    const clipboardContent = await navigator.clipboard.readText();
    
    // 检查剪贴板是否为空
    if (!clipboardContent || clipboardContent.trim() === "") {
      showNotification("剪贴板为空");
    } else {
      // 显示剪贴板内容，如果内容太长则截取
      let displayContent = clipboardContent;
      if (displayContent.length > 200) {
        displayContent = displayContent.substring(0, 200) + '...';
      }
      showNotification("剪贴板内容: " + displayContent);
    }
  } catch (error) {
    console.error("读取剪贴板内容时出错", error);
    showNotification("无法读取剪贴板内容: " + error.message);
  }
}

(function() {
  // 检查扩展上下文是否有效
  if (!chrome.runtime) {
    return;
  }

  // 创建按钮容器
  const container = document.createElement('div');
  container.id = 'custom-clipboard-toolbar';

  // 创建 拼接内容 按钮 (原 Ctrl+Shift-1)
  const btn1 = document.createElement('button');
  btn1.textContent = '拼接内容';
  btn1.addEventListener('click', function() {
    // 使用 try-catch 包装整个处理过程
    try {
      // 检查扩展上下文是否仍然有效
      if (chrome && chrome.runtime) {
        // 发送消息到 background script
        chrome.runtime.sendMessage({action: "processClipboardAlt1"}, function(response) {
          // 检查是否有错误
          if (chrome.runtime.lastError) {
            // 静默处理错误，不显示在控制台
          } else {
            showNotification('拼接内容 功能已触发');
          }
        });
      } else {
        // 静默处理上下文失效，不显示在控制台
      }
    } catch (error) {
      // 静默处理错误，不显示在控制台
    }
  });

  // 创建显示保存内容按钮
  const showContentBtn = document.createElement('button');
  showContentBtn.textContent = '显示保存内容';
  showContentBtn.addEventListener('click', function() {
    // 使用 try-catch 包装整个处理过程
    try {
      // 检查扩展上下文是否仍然有效
      if (chrome && chrome.runtime) {
        showSavedContent();
      } else {
        // 静默处理上下文失效，不显示在控制台
      }
    } catch (error) {
      // 静默处理错误，不显示在控制台
    }
  });

  // 创建 重置拼接 按钮 (原 Ctrl+Shift-2)
  const btn2 = document.createElement('button');
  btn2.textContent = '重置拼接';
  btn2.addEventListener('click', function() {
    // 使用 try-catch 包装整个处理过程
    try {
      // 检查扩展上下文是否仍然有效
      if (chrome && chrome.runtime) {
        // 发送消息到 background script
        chrome.runtime.sendMessage({action: "resetClipboardData"}, function(response) {
          // 检查是否有错误
          if (chrome.runtime.lastError) {
            // 静默处理错误，不显示在控制台
          } else {
            showNotification('拼接数据已重置');
          }
        });
      } else {
        // 静默处理上下文失效，不显示在控制台
      }
    } catch (error) {
      // 静默处理错误，不显示在控制台
    }
  });

  // 添加按钮到容器 (按新顺序: 拼接内容 -> 显示保存内容 -> 重置拼接)
  container.appendChild(btn1);
  container.appendChild(showContentBtn);
  container.appendChild(btn2);

  // 将容器添加到页面
  // 确保document.body存在后再添加元素
  if (document.body) {
    document.body.appendChild(container);
  } else {
    // 如果document.body不存在，等待DOM加载完成后再添加
    document.addEventListener('DOMContentLoaded', function() {
      if (document.body) {
        document.body.appendChild(container);
      }
    });
  }

  // 添加CSS样式
  const link = document.createElement('link');
  link.rel = 'stylesheet';
  link.type = 'text/css';
  link.href = chrome.runtime.getURL('content.css');
  // 确保document.head存在后再添加元素
  if (document.head) {
    document.head.appendChild(link);
  } else {
    // 如果document.head不存在，等待DOM加载完成后再添加
    document.addEventListener('DOMContentLoaded', function() {
      if (document.head) {
        document.head.appendChild(link);
      }
    });
  }

  // 监听来自 background 的消息
  try {
    if (chrome && chrome.runtime) {
      chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
        // 检查扩展上下文是否仍然有效
        if (!(chrome && chrome.runtime)) {
          return;
        }
        
        if (request.action === "handleClipboardOperation") {
          handleClipboardOperation();
          sendResponse({status: "success"});
        } else if (request.action === "showResetNotification") {
          showNotification("数据已重置");
          // 重置时清空剪贴板
          clearClipboard();
          sendResponse({status: "success"});
        }
      });
    }
  } catch (error) {
    // 静默处理错误，不显示在控制台
  }

  // 清空剪贴板
  async function clearClipboard() {
    try {
      // 检查扩展上下文是否仍然有效
      if (!(chrome && chrome.runtime)) {
        return;
      }
      
      await navigator.clipboard.writeText("");
      console.log("剪贴板已清空");
    } catch (error) {
      console.error("清空剪贴板时出错", error);
    }
  }

  // 处理剪贴板操作
  async function handleClipboardOperation() {
    // 检查扩展上下文是否仍然有效
    if (!(chrome && chrome.runtime)) {
      return;
    }
    
    try {
      showNotification("正在处理剪贴板内容...");

      // 读取剪贴板内容
      const clipboardContent = await navigator.clipboard.readText();
      console.log("读取剪贴板内容", { clipboardContent });

      // 检查剪贴板是否为空
      if (!clipboardContent || clipboardContent.trim() === "") {
        showNotification("剪贴板为空，不进行处理");
        return;
      }

      // 检查是否包含"商品id"前缀
      if (clipboardContent.startsWith("商品id")) {
        // 如果已经是以"商品id"开头，则不做任何处理
        showNotification("内容已包含商品id前缀，不做处理");
        return;
      }

      // 检查是否包含"视频标题"前缀
      if (clipboardContent.startsWith("视频标题")) {
        // 如果已经是以"视频标题"开头，则不做任何处理
        showNotification("内容已包含视频标题前缀，不做处理");
        return;
      }

      // 检查是否为纯数字且至少10位
      const isPureNumber = /^\d{10,}$/.test(clipboardContent);
      console.log("检查是否为纯数字", { isPureNumber, content: clipboardContent });

      if (isPureNumber) {
        // 是纯数字，添加"商品id"前缀并保存
        const productId = "商品id" + clipboardContent;

        // 保存商品ID到存储
        await new Promise((resolve, reject) => {
          chrome.storage.local.set({savedProductId: productId}, function() {
            if (chrome.runtime.lastError) {
              reject(chrome.runtime.lastError);
            } else {
              resolve();
            }
          });
        });

        // 将处理后的内容写回剪贴板
        await navigator.clipboard.writeText(productId);
        showNotification("商品ID已保存: " + productId);
      } else {
        // 不是纯数字，检查是否包含视频标题信息
        console.log("内容不是纯数字，处理为视频标题");

        // 获取之前保存的商品ID
        const result = await new Promise((resolve, reject) => {
          chrome.storage.local.get(['savedProductId'], function(result) {
            if (chrome.runtime.lastError) {
              reject(chrome.runtime.lastError);
            } else {
              resolve(result);
            }
          });
        });

        const savedProductId = result.savedProductId || "";
        console.log("获取保存的商品ID", { savedProductId });

        if (savedProductId) {
          // 有保存的商品ID，拼接视频标题，添加后缀"～%N"
          const videoTitle = "视频标题" + clipboardContent + "～%N";
          const combinedContent = savedProductId + videoTitle;

          // 将拼接后的内容写回剪贴板
          await navigator.clipboard.writeText(combinedContent);
          showNotification("拼接成功: " + combinedContent);
        } else {
          // 没有保存的商品ID，只添加视频标题前缀和后缀"～%N"
          const videoTitle = "视频标题" + clipboardContent + "～%N";

          // 将处理后的内容写回剪贴板
          await navigator.clipboard.writeText(videoTitle);
          showNotification("视频标题已保存: " + videoTitle);
        }
      }
    } catch (error) {
      console.error("处理剪贴板内容时出错", error);
      showNotification("处理剪贴板内容时出错: " + error.message);
    }
  }

  // 当页面加载完成后，检查是否需要处理剪贴板操作
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', function() {
      // 检查是否有来自 background 的消息需要处理
    });
  }
  
  // 添加调试信息
  console.log('内容脚本已加载');
  console.log("Content.js 加载完成");
})();